package com.ckr.demo04;

import com.ckr.demo02.UserService;
import com.ckr.demo02.UserServiceImplementation;

/**
 * @author Shadowckr
 * @create 2021-12-03 16:15
 */
public class Client {
    public static void main(String[] args) {
        // 真实角色
        UserServiceImplementation userServiceImplementation = new UserServiceImplementation();
        // 代理角色，不存在
        ProxyInvocationHandler proxyInvocationHandler = new ProxyInvocationHandler();
        // 设置要代理的对象
        proxyInvocationHandler.setTarget(userServiceImplementation);
        // 动态生成代理类对象
        UserService proxy = (UserService) proxyInvocationHandler.getProxyInstance();

        proxy.add();
        proxy.query();
        proxy.delete();
        proxy.update();
    }
    // 核心：一个动态代理，一般代理某一类业务。一个动态代理可以代理多个类，代理的是接口！
    // 实现类和得到的代理类，二者之间实际上没有任何关系，只不过它们都实现了同一个接口，所以强转的时候只能用接口来声明！
}
